package com.shijimo.generator.util;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Map;

/**
 * @author Dream_飞翔
 * @date 2021/10/9
 * @time 19:04
 * @email 1072876976@qq.com
 */
public class FreemarkerUtil {

    // 模板文件所在路径，模板文件的路径一般不会改变
    static String ftlPath = "generator\\src\\main\\java\\com\\shijimo\\generator\\ftl\\";

    static Template temp;

    /**
     * 读取模板方法
     *
     * @param ftlName 生成ftl文件的名称
     * @throws IOException IO异常
     */
    public static void initConfig(String ftlName) throws IOException {
        // 读模板
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
        cfg.setDirectoryForTemplateLoading(new File(ftlPath));
        cfg.setObjectWrapper(new DefaultObjectWrapper(Configuration.VERSION_2_3_31));
        temp = cfg.getTemplate(ftlName);
    }

    /**
     * 生成模板方法
     *
     * @param fileName 包含路径的文件名
     * @throws IOException       IO异常
     * @throws TemplateException Template异常
     */
    public static void generator(String fileName, Map<String, Object> map) throws IOException, TemplateException {

        // 根据模板生成文件
        FileWriter fw = new FileWriter(fileName);
        BufferedWriter bw = new BufferedWriter(fw);
        temp.process(map, bw);

        // 关闭流
        bw.flush();
        fw.close();
    }
}
